<?php
/**
 * Classe déléguée aux templates
 * La classe intègre et parse les templates liés
 * aux actions
 *
 * @category librairies
 * @package sh
 *
 * @author Mickaël CASTANHEIRO
 * @version 1.0
 */
class shTemplate extends shBase {
    /**
     * @access protected
     * @var string
     */
    protected $path;

    /**
     * @access protected
     * @var array
     */
    protected $datas;

    /**
     * Constructeur de la classe
     */
    public function __construct() {
	$this->datas = array();
    }


    /**
     * Parse le template
     *
     * @return String le contenu du template
     */
    public function getContents() {
	$moteur  = shMoteur::__instance();

	// Parse la data
	foreach($this->datas AS $key=>$value) {
	    ${$key} = $value;
	}

	// Parse le template
	ob_start();
	include $this->path;
	$contents = ob_get_contents();
	ob_end_clean();

	return $contents;
    }

    /**
     * Parse le template et l'affiche
     * @param Active la compression de sortie
     */
    public function display($_gzHandler=false) {
	if ( $_gzHandler ) ob_start('gz_handler');
	else ob_start();
	echo $this->getContents();
	ob_end_flush();
    }

    /**
     * Charge un template
     * @param <string> Chemin jusqu'au template
     * @param <array> variables nécessaires au template
     */
    public static function tplInclude($_path, $_vars) {
	$template = new shTemplate;
	$template->setPath( $_path);
	$template->setDatas($_vars);
	$template->display();
    }

    /**
     *  Charge l'action associée à la requête
     */
    public static function load() {
	$request = shRequest::__instance();
	$moteur  = shMoteur::__instance();

	if ( $request->getMode() != 'html' ) {
	    $mode = ( $request->getMode() == 'ajax' ) ? 'xml' : 'tpl';
	    $template = new shTemplate();
	    $template->setPath(DIR_TEMPLATES . $request->getModule() .'/'. $request->getAction() . ucfirst($request->getRequest()) . '.' . $mode);
	    $template->setDatas($moteur->getDatas());
	    $template->display();
	}
	else {

	    $template = new shTemplate();
	    $template->setPath(DIR_TEMPLATES . $request->getModule() .'/'. $request->getAction() . ucfirst($request->getRequest()) . '.tpl');
	    $template->setDatas($moteur->getDatas());

	    $structure = new shTemplate();
	    $structure->setPath(DIR_TEMPLATES . '_structure.tpl');
	    $structure->addData('title', $moteur->getTitle())
		    ->addData('stylesheets', $moteur->getStylesheets())
		    ->addData('javascripts', $moteur->getJavascripts())
		    ->addData('content', $template->getContents())
		    ->addData('ariane', $moteur->getArianes());

	    $structure->display(true);
	}
    }
}
?>